#include "pch.h"

#include "math/point2.h"



namespace Math
{

	//////////////////////////////////////////////////////////////////////////
	point2::point2():
float2(0.0f,0.0f)
{

}


//////////////////////////////////////////////////////////////////////////
point2::point2(scalar x, scalar y):
float2(x,y)
{

}


//////////////////////////////////////////////////////////////////////////
point2::point2(const point2 & rhs):
float2(rhs.m_x,rhs.m_y)
{

}


//////////////////////////////////////////////////////////////////////////
point2::point2(const Math::float2 &rhs):
float2(rhs)
{

}



//////////////////////////////////////////////////////////////////////////
void point2::operator =(const point2 & rhs)
{
	this->m_x = rhs.m_x;
	this->m_y = rhs.m_y;
}


//////////////////////////////////////////////////////////////////////////
bool point2::operator ==(const point2 & rhs) const 
{
	return ((this->m_x == rhs.m_x) && (this->m_y == rhs.m_y));
}


//////////////////////////////////////////////////////////////////////////
bool point2::operator !=(const point2 & rhs) const 
{
	return ((this->m_x != rhs.m_x) || (this->m_y != rhs.m_y));
}


//////////////////////////////////////////////////////////////////////////
void point2::operator +=(const vector2 & rhs)
{
	this->m_x += rhs.m_x;
	this->m_y += rhs.m_y;
}


//////////////////////////////////////////////////////////////////////////
void point2::operator -=(const vector2 & rhs) 
{
	this->m_x -= rhs.m_x;
	this->m_y -= rhs.m_y;
}


//////////////////////////////////////////////////////////////////////////
point2 point2::operator +(const Math::vector2 &rhs) const
{
	return point2(this->m_x + rhs.m_x, this->m_y + rhs.m_y);
}


//////////////////////////////////////////////////////////////////////////
point2 point2::operator -(const Math::vector2 & rhs) const 
{
	return point2(this->m_x - rhs.m_x, this->m_y - rhs.m_y);
}


//////////////////////////////////////////////////////////////////////////
vector2 point2::operator -(const Math::point2 & rhs) const 
{
	return vector2(r_sqrt(this->m_x * this->m_x + rhs.m_x * rhs.m_x), r_sqrt(this->m_y * this->m_y + rhs.m_y * rhs.m_y));
}


//////////////////////////////////////////////////////////////////////////
vector2 point2::operator +(const Math::point2 & rhs) const 
{
	return vector2(r_sqrt(this->m_x * this->m_x + rhs.m_x * rhs.m_x), r_sqrt(this->m_y * this->m_y + rhs.m_y * rhs.m_y));
}





//////////////////////////////////////////////////////////////////////////
void point2::set(scalar x, scalar y)
{
	this->m_x = x;
	this->m_y = y;
}





//////////////////////////////////////////////////////////////////////////
point2 point2::origin()
{
	return point2(0.0f,0.0f);
}

}